<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>try...catch</title>
</head>
<body>
<script>
  /*
  * 为何要进行try...catch...
  * 如果JS的一段代码出现了问题（运行时出现了问题）那么代码停在出问题的那一行并不会执行了
  * 为了保证代码就算在出错的时候也要执行（出错就走出错的逻辑)所以我们需要try...catch...
  *
  * try...catch...只能捕获运行时异常，即代码执行的过程中出错，语法出错不属于运行时异常
  * 因为语法出错编译期间都不会通过
  *
  * */

  /*
  * 自定义异常可以当做if来使用，比如我们程序的逻辑需要某个值，那个值如果不传递过来后续的逻辑就不能运行
  * 这个时候我们可以自己抛出一个异常
  *
  *
  * */
  try{
    console.log(1);
    throw new Error("fh")

  }catch (e){
    console.log(1);
  }


  /*
  * try...catch...只能在同步代码中生效 也就是说如果想捕获计时器或者Promise这一类异步操作的话
  * 要在计时器内部才能捕获
  * */

  console.log("----");

  /*
  * 如果如果try包裹的代码中有return部分的话，那么会先执行完finally中的代码再执行return
  *
  *
  * */

  function foo() {
    try {
      return 1;
    } catch (e) {
      console.log(e);
    } finally {
      console.log(2);
    }
  }

  console.log(foo());


</script>
</body>
</html>